package com.xxxx.core.model;

import com.github.pagehelper.Page;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * 名称：PageModel
 * 描述：自定义封装好的分页Page对象，与页面 bootstrap 插件交互使用
 * 作者：vvvv
 * 时间：2018/4/12 22:44
 */
public class PageModel<T> implements Serializable {

    private static final long serialVersionUID = 5216322448801239945L;

    /**
     * 总记录数
     */
    private long total;

    /**
     * 结果集
     */
    private List<T> rows;

    /**
     * 页码值
     */
    private int pageNum;

    /**
     * 每页记录数
     */
    private int pageSize;

    /**
     * 总页数
     */
    private int pages;

    /**
     * 当前页的数量 <= pageSize，该属性来自ArrayList的size属性
     */
    private int size;

    /**
     * 无参构造方法，构建 PageModel 对象
     */
    public PageModel() {
    }

    /**
     * 构造方法（根据参数 List 创建 PageModel）
     *
     * @param list 分页查询出的 Page 集合
     */
    public PageModel(List<T> list) {
        if (list instanceof Page) {
            Page<T> page = (Page<T>) list;
            this.pageNum = page.getPageNum();
            this.pageSize = page.getPageSize();
            this.total = page.getTotal();
            this.pages = page.getPages();
            List<T> customList = new ArrayList<>();
            for (T t : list) {
                customList.add(t);
            }
            this.rows = customList;
            this.size = page.size();
        }
    }

    /**
     * 获取 总记录数
     */
    public long getTotal() {
        return this.total;
    }

    /**
     * 设置 总记录数
     */
    public void setTotal(long total) {
        this.total = total;
    }

    /**
     * 获取 结果集
     */
    public List<T> getRows() {
        return this.rows;
    }

    /**
     * 设置 结果集（使用 forEach 遍历集合转换对象
     */
    public void setRows(List<T> rows) {
        List<T> list = new ArrayList<>();
        for (T t : rows) {
            list.add(t);
        }
        this.rows = rows;
    }

    /**
     * 获取 页码值
     */
    public int getPageNum() {
        return this.pageNum;
    }

    /**
     * 设置 页码值
     */
    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }

    /**
     * 获取 每页记录数
     */
    public int getPageSize() {
        return this.pageSize;
    }

    /**
     * 设置 每页记录数
     */
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    /**
     * 获取 总页数
     */
    public int getPages() {
        return this.pages;
    }

    /**
     * 设置 总页数
     */
    public void setPages(int pages) {
        this.pages = pages;
    }

    /**
     * 获取 当前页的数量 <= pageSize，该属性来自ArrayList的size属性
     */
    public int getSize() {
        return this.size;
    }

    /**
     * 设置 当前页的数量 <= pageSize，该属性来自ArrayList的size属性
     */
    public void setSize(int size) {
        this.size = size;
    }
}
